{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Gradient Descent Algorithm"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 实验说明\n",
    "使用梯度下降算法拟合1-100之间实数值的平方根\n",
    "\n",
    "该方法可以拟合任何函数关系式，拟合的准确率与learning_rate（学习率）和epoch（迭代次数）相关\n",
    "\n",
    "下面实验计算了 y=x^2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import math"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " 1的平方(近似)为：1.00000000，真实值是：1.00000000\n",
      " 2的平方(近似)为：4.00000000，真实值是：4.00000000\n",
      " 3的平方(近似)为：9.00000000，真实值是：9.00000000\n",
      " 4的平方(近似)为：16.00000000，真实值是：16.00000000\n",
      " 5的平方(近似)为：25.00000000，真实值是：25.00000000\n",
      " 6的平方(近似)为：36.00000000，真实值是：36.00000000\n",
      " 7的平方(近似)为：49.00000000，真实值是：49.00000000\n",
      " 8的平方(近似)为：64.00000000，真实值是：64.00000000\n",
      " 9的平方(近似)为：81.00000000，真实值是：81.00000000\n",
      " 10的平方(近似)为：100.00000000，真实值是：100.00000000\n",
      " 11的平方(近似)为：121.00000000，真实值是：121.00000000\n",
      " 12的平方(近似)为：144.00000000，真实值是：144.00000000\n",
      " 13的平方(近似)为：169.00000000，真实值是：169.00000000\n",
      " 14的平方(近似)为：196.00000000，真实值是：196.00000000\n",
      " 15的平方(近似)为：225.00000000，真实值是：225.00000000\n",
      " 16的平方(近似)为：256.00000000，真实值是：256.00000000\n",
      " 17的平方(近似)为：289.00000000，真实值是：289.00000000\n",
      " 18的平方(近似)为：324.00000000，真实值是：324.00000000\n",
      " 19的平方(近似)为：361.00000000，真实值是：361.00000000\n",
      " 20的平方(近似)为：400.00000000，真实值是：400.00000000\n",
      " 21的平方(近似)为：441.00000000，真实值是：441.00000000\n",
      " 22的平方(近似)为：484.00000000，真实值是：484.00000000\n",
      " 23的平方(近似)为：529.00000000，真实值是：529.00000000\n",
      " 24的平方(近似)为：576.00000000，真实值是：576.00000000\n",
      " 25的平方(近似)为：625.00000000，真实值是：625.00000000\n",
      " 26的平方(近似)为：676.00000000，真实值是：676.00000000\n",
      " 27的平方(近似)为：729.00000000，真实值是：729.00000000\n",
      " 28的平方(近似)为：784.00000000，真实值是：784.00000000\n",
      " 29的平方(近似)为：841.00000000，真实值是：841.00000000\n",
      " 30的平方(近似)为：900.00000000，真实值是：900.00000000\n",
      " 31的平方(近似)为：961.00000000，真实值是：961.00000000\n",
      " 32的平方(近似)为：1024.00000000，真实值是：1024.00000000\n",
      " 33的平方(近似)为：1089.00000000，真实值是：1089.00000000\n",
      " 34的平方(近似)为：1156.00000000，真实值是：1156.00000000\n",
      " 35的平方(近似)为：1225.00000000，真实值是：1225.00000000\n",
      " 36的平方(近似)为：1296.00000000，真实值是：1296.00000000\n",
      " 37的平方(近似)为：1369.00000000，真实值是：1369.00000000\n",
      " 38的平方(近似)为：1444.00000000，真实值是：1444.00000000\n",
      " 39的平方(近似)为：1521.00000000，真实值是：1521.00000000\n",
      " 40的平方(近似)为：1600.00000000，真实值是：1600.00000000\n",
      " 41的平方(近似)为：1681.00000000，真实值是：1681.00000000\n",
      " 42的平方(近似)为：1764.00000000，真实值是：1764.00000000\n",
      " 43的平方(近似)为：1849.00000000，真实值是：1849.00000000\n",
      " 44的平方(近似)为：1936.00000000，真实值是：1936.00000000\n",
      " 45的平方(近似)为：2025.00000000，真实值是：2025.00000000\n",
      " 46的平方(近似)为：2116.00000000，真实值是：2116.00000000\n",
      " 47的平方(近似)为：2209.00000000，真实值是：2209.00000000\n",
      " 48的平方(近似)为：2304.00000000，真实值是：2304.00000000\n",
      " 49的平方(近似)为：2401.00000000，真实值是：2401.00000000\n",
      " 50的平方(近似)为：2500.00000000，真实值是：2500.00000000\n",
      " 51的平方(近似)为：2601.00000000，真实值是：2601.00000000\n",
      " 52的平方(近似)为：2704.00000000，真实值是：2704.00000000\n",
      " 53的平方(近似)为：2809.00000000，真实值是：2809.00000000\n",
      " 54的平方(近似)为：2916.00000000，真实值是：2916.00000000\n",
      " 55的平方(近似)为：3025.00000000，真实值是：3025.00000000\n",
      " 56的平方(近似)为：3136.00000000，真实值是：3136.00000000\n",
      " 57的平方(近似)为：3249.00000000，真实值是：3249.00000000\n",
      " 58的平方(近似)为：3364.00000000，真实值是：3364.00000000\n",
      " 59的平方(近似)为：3481.00000000，真实值是：3481.00000000\n",
      " 60的平方(近似)为：3600.00000000，真实值是：3600.00000000\n",
      " 61的平方(近似)为：3721.00000000，真实值是：3721.00000000\n",
      " 62的平方(近似)为：3844.00000000，真实值是：3844.00000000\n",
      " 63的平方(近似)为：3969.00000000，真实值是：3969.00000000\n",
      " 64的平方(近似)为：4096.00000000，真实值是：4096.00000000\n",
      " 65的平方(近似)为：4224.99999999，真实值是：4225.00000000\n",
      " 66的平方(近似)为：4355.99999999，真实值是：4356.00000000\n",
      " 67的平方(近似)为：4488.99999999，真实值是：4489.00000000\n",
      " 68的平方(近似)为：4623.99999999，真实值是：4624.00000000\n",
      " 69的平方(近似)为：4760.99999999，真实值是：4761.00000000\n",
      " 70的平方(近似)为：4899.99999999，真实值是：4900.00000000\n",
      " 71的平方(近似)为：5040.99999999，真实值是：5041.00000000\n",
      " 72的平方(近似)为：5183.99999999，真实值是：5184.00000000\n",
      " 73的平方(近似)为：5328.99999999，真实值是：5329.00000000\n",
      " 74的平方(近似)为：5475.99999999，真实值是：5476.00000000\n",
      " 75的平方(近似)为：5624.99999999，真实值是：5625.00000000\n",
      " 76的平方(近似)为：5775.99999999，真实值是：5776.00000000\n",
      " 77的平方(近似)为：5928.99999999，真实值是：5929.00000000\n",
      " 78的平方(近似)为：6083.99999999，真实值是：6084.00000000\n",
      " 79的平方(近似)为：6240.99999999，真实值是：6241.00000000\n",
      " 80的平方(近似)为：6399.99999999，真实值是：6400.00000000\n",
      " 81的平方(近似)为：6560.99999999，真实值是：6561.00000000\n",
      " 82的平方(近似)为：6723.99999999，真实值是：6724.00000000\n",
      " 83的平方(近似)为：6888.99999999，真实值是：6889.00000000\n",
      " 84的平方(近似)为：7055.99999999，真实值是：7056.00000000\n",
      " 85的平方(近似)为：7224.99999999，真实值是：7225.00000000\n",
      " 86的平方(近似)为：7395.99999999，真实值是：7396.00000000\n",
      " 87的平方(近似)为：7568.99999999，真实值是：7569.00000000\n",
      " 88的平方(近似)为：7743.99999999，真实值是：7744.00000000\n",
      " 89的平方(近似)为：7920.99999999，真实值是：7921.00000000\n",
      " 90的平方(近似)为：8099.99999999，真实值是：8100.00000000\n",
      " 91的平方(近似)为：8280.99999998，真实值是：8281.00000000\n",
      " 92的平方(近似)为：8463.99999998，真实值是：8464.00000000\n",
      " 93的平方(近似)为：8648.99999998，真实值是：8649.00000000\n",
      " 94的平方(近似)为：8835.99999998，真实值是：8836.00000000\n",
      " 95的平方(近似)为：9024.99999997，真实值是：9025.00000000\n",
      " 96的平方(近似)为：9215.99999996，真实值是：9216.00000000\n",
      " 97的平方(近似)为：9408.99999995，真实值是：9409.00000000\n",
      " 98的平方(近似)为：9603.99999994，真实值是：9604.00000000\n",
      " 99的平方(近似)为：9800.99999992，真实值是：9801.00000000\n"
     ]
    }
   ],
   "source": [
    "learning_rate = 0.01\n",
    "epoch = 500000\n",
    "for a in range(1, 100):\n",
    "    cur = 0\n",
    "    for i in range(epoch):\n",
    "        cur -= learning_rate*(math.sqrt(cur)-a)\n",
    "    print(' %d的平方(近似)为：%.8f，真实值是：%.8f' % (a, cur, a**2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
